{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Improving symbolic regression with linear scaling\n",
    "Generally, if the constants in a mathematical model are continuous real numbers, then it is difficult for both GP/GEP to find the true value of such constants. In many cases, GEP can obtain the true *structure* of the model very quickly, after which it will spend much more time in optimizing the constants. However, even with the [GEP-RNC](numerical_expression_inference-RNC.ipynb) algorithm proposed by Cândida Ferreira, it is still quite difficult for GEP to locate a good value for the constants, even after a lot of efforts have been spent by GEP.\n",
    "\n",
    "In the paper *Improving Symbolic Regression with Interval Arithmetic and Linear Scaling* and [*Scaled Symbolic Regression*](https://www.researchgate.net/publication/220286036_Scaled_Symbolic_Regression), a simple yet effective method is developed to improve symbolic regression of arbitrary mathematical expressions. The intuition of this method is that **by rescaling the expression found by GEP/GP to the optimal slope and intercept, it will focus its search on expressions that are close in shape with the target, instead of demanding that first the scale is correct. Thus, GEP/GP will focus on the construction of the model structure, which it is extremely good at, and the linear scaling technique can help find the constant coefficients.**\n",
    "\n",
    "We only need to change the evaluation routine when implementing the linear scaling technique. Instead of the original mean squared error (MSE) objective, first rescale the model by determining a pair of weights $(a, b)$ to \n",
    "\\begin{equation}\n",
    "min_{a,b} \\quad \\frac{1}{N} \\sum_{i=1}^N (y_i - (ay_{pi}+b))^2\n",
    "\\end{equation}\n",
    "where $y_i$ and $y_{pi}$ are the true value and predicted value for the $i^{th}$ example's target variable.\n",
    "\n",
    "Thus, if the best model found by GEP finally is $g(x)$, then the scaled model is $ag(x)+b$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import geppy as gep\n",
    "from deap import creator, base, tools\n",
    "import numpy as np\n",
    "import random\n",
    "\n",
    "# for reproduction\n",
    "s = 10\n",
    "random.seed(s)\n",
    "np.random.seed(s)\n",
    "\n",
    "# whether enable linear scaling\n",
    "LINEAR_SCALING = True"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Synthetic dataset\n",
    "\n",
    "For this simple task, we first choose a ground truth function $f$ to generate a dataset $D$. Then, 50 input-output exampels are generated randomly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def f(x):\n",
    "    \"\"\"Ground truth function\"\"\"\n",
    "    return -2.45 * x ** 2 + 9.87 * x  + 14.56"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_cases = 100\n",
    "X = np.random.uniform(-10, 10, size=n_cases)   # random numbers in range [-10, 10)\n",
    "Y = f(X) + np.random.normal(size=n_cases)   # Gaussian noise\n",
    "Y = f(X)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Creating the primitives set\n",
    "The first step in GEP (or GP as well) is to specify the primitive set, which contains the elementary building blocks to formulate the model. For this problem, we have:\n",
    "+ function set: the standard arithmetic operators addition (+), subtraction (-), multiplication (*), and division (/).\n",
    "+ terminal set: only the single input 'x' and random numerical constants (RNC).\n",
    "\n",
    "NOTE:\n",
    "\n",
    "- We define a *protected division* to avoid dividing by zero.\n",
    "- Even there may be multiple RNCs in the model, we only need to call `PrimitiveSet.add_rnc` once."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def protected_div(a, b):\n",
    "    if np.isscalar(b):\n",
    "        if abs(b) < 1e-6:\n",
    "            b = 1\n",
    "    else:\n",
    "        b[abs(b) < 1e-6] = 1\n",
    "    return a / b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "import operator \n",
    "\n",
    "pset = gep.PrimitiveSet('Main', input_names=['x'])\n",
    "pset.add_function(operator.add, 2)\n",
    "pset.add_function(operator.sub, 2)\n",
    "pset.add_function(operator.mul, 2)\n",
    "pset.add_function(protected_div, 2)\n",
    "pset.add_ephemeral_terminal(name='enc', gen=lambda: random.uniform(-5, 5)) # each ENC is a random integer within [-10, 10]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Create the individual and population\n",
    "Our objective is to **minimize** the MSE (mean squared error) for data fitting.\n",
    "## Define the indiviudal class, a subclass of *gep.Chromosome*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from deap import creator, base, tools\n",
    "\n",
    "creator.create(\"FitnessMin\", base.Fitness, weights=(-1,))  # to minimize the objective (fitness)\n",
    "creator.create(\"Individual\", gep.Chromosome, fitness=creator.FitnessMin, a=float, b=float)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Register the individual and population creation operations\n",
    "In DEAP, it is recommended to register the operations used in evolution into a *toolbox* to make full use of DEAP functionality. The configuration of individuals in this problem is:\n",
    "+ head length: 6\n",
    "+ number of genes in each chromosome: 2\n",
    "\n",
    "Generally, more complicated problems require a larger head length and longer chromosomes formed with more genes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "h = 7 # head length\n",
    "n_genes = 2   # number of genes in a chromosome"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "toolbox = gep.Toolbox()\n",
    "toolbox.register('gene_gen', gep.Gene, pset=pset, head_length=h)\n",
    "toolbox.register('individual', creator.Individual, gene_gen=toolbox.gene_gen, n_genes=n_genes, linker=operator.add)\n",
    "toolbox.register(\"population\", tools.initRepeat, list, toolbox.individual)\n",
    "\n",
    "# compile utility: which translates an individual into an executable function (Lambda)\n",
    "toolbox.register('compile', gep.compile_, pset=pset)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the fitness evaluation function\n",
    "In DEAP, the single objective optimization problem is just a special case of more general multiobjective ones. Since *geppy* is built on top of DEAP, it conforms to this convention. **Even if the fitness only contains one measure, keep in mind that DEAP stores it as an iterable.** \n",
    "\n",
    "Knowing that, you can understand why the evaluation function must return a tuple value (even if it is a 1-tuple). That's also why we set ``weights=(-1,)`` when creating the ``FitnessMax`` class."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate(individual):\n",
    "    \"\"\"Evalute the fitness of an individual: MSE (mean squared error)\"\"\"\n",
    "    func = toolbox.compile(individual)\n",
    "    Yp = func(X)   # predictions with the GEP model\n",
    "    return np.mean((Y - Yp) ** 2),"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate_linear_scaling(individual):\n",
    "    \"\"\"Evaluate the fitness of an individual with linearly scaled MSE.\n",
    "    Get a and b by minimizing (a*Yp + b - Y)\"\"\"\n",
    "    func = toolbox.compile(individual)\n",
    "    Yp = func(X)\n",
    "    \n",
    "    # special cases: (1) individual has only a terminal \n",
    "    #  (2) individual returns the same value for all test cases, like 'x - x + 10'. np.linalg.lstsq will fail in such cases.\n",
    "    \n",
    "    if isinstance(Yp, np.ndarray):\n",
    "        Q = np.hstack((np.reshape(Yp, (-1, 1)), np.ones((len(Yp), 1))))\n",
    "        (individual.a, individual.b), residuals, _, _ = np.linalg.lstsq(Q, Y, rcond=None)   \n",
    "        # residuals is the sum of squared errors\n",
    "        if residuals.size > 0:\n",
    "            return residuals[0] / len(Y),   # MSE\n",
    "    \n",
    "    # for the above special cases, the optimal linear scaling is just the mean of true target values\n",
    "    individual.a = 0\n",
    "    individual.b = np.mean(Y)\n",
    "    return np.mean((Y - individual.b) ** 2),"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "if LINEAR_SCALING:\n",
    "    toolbox.register('evaluate', evaluate_linear_scaling)\n",
    "else:\n",
    "    toolbox.register('evaluate', evaluate)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Register genetic operators\n",
    "Compared with GP and other genetic algorithms, GEP has its own set of genetic operators aside from common mutation and crossover. For details, please check the tutorial [Introduction to gene expression programming](https://geppy.readthedocs.io/en/latest/intro_GEP.html).\n",
    "\n",
    "In the following code, the selection operator is ``tools.selTournament`` provided by DEAP, while all other operators are specially designed for GEP in *geppy*."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "toolbox.register('select', tools.selTournament, tournsize=3)\n",
    "# 1. general operators\n",
    "toolbox.register('mut_uniform', gep.mutate_uniform, pset=pset, ind_pb=0.05, pb=1)\n",
    "toolbox.register('mut_invert', gep.invert, pb=0.1)\n",
    "toolbox.register('mut_is_transpose', gep.is_transpose, pb=0.1)\n",
    "toolbox.register('mut_ris_transpose', gep.ris_transpose, pb=0.1)\n",
    "toolbox.register('mut_gene_transpose', gep.gene_transpose, pb=0.1)\n",
    "toolbox.register('cx_1p', gep.crossover_one_point, pb=0.4)\n",
    "toolbox.register('cx_2p', gep.crossover_two_point, pb=0.2)\n",
    "toolbox.register('cx_gene', gep.crossover_gene, pb=0.1)\n",
    "toolbox.register('mut_ephemeral', gep.mutate_uniform_ephemeral, ind_pb='1p')  # 1p: expected one point mutation in an individual\n",
    "toolbox.pbs['mut_ephemeral'] = 1  # we can also give the probability via the pbs property"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Statistics to be inspected\n",
    "We often need to monitor of progress of an evolutionary program. DEAP offers two classes to handle the boring work of recording statistics. Details are presented in [Computing statistics](http://deap.readthedocs.io/en/master/tutorials/basic/part3.html). In the following, we are intereted in the average/standard deviation/min/max of all the individuals' fitness in each generation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "stats = tools.Statistics(key=lambda ind: ind.fitness.values[0])\n",
    "stats.register(\"avg\", np.mean)\n",
    "stats.register(\"std\", np.std)\n",
    "stats.register(\"min\", np.min)\n",
    "stats.register(\"max\", np.max)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Launch evolution\n",
    "We make use of *geppy*'s builtin algorithm ``gep_rnc`` here to perform the GEP-RNC evolution. A special class from DEAP, `HallOfFame`, is adopted to store the best individuals ever found. Besides, it should be noted that in GEP [*elitism*](https://en.wikipedia.org/wiki/Genetic_algorithm#Elitism) is highly recommended because some genetic operators in GEP are destructive and may destroy the best individual we have evolved."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "gen\tnevals\tavg    \tstd    \tmin    \tmax    \n",
      "0  \t100   \t6025.31\t2181.39\t1.38458\t8775.92\n",
      "1  \t99    \t4833.99\t2055.84\t1.38458\t8775.92\n",
      "2  \t99    \t4259.64\t2051.55\t1.38458\t8775.92\n",
      "3  \t99    \t4191.34\t2535.8 \t1.35871\t8775.92\n",
      "4  \t99    \t3803.35\t2612.74\t0.0360462\t8775.92\n",
      "5  \t99    \t3118.3 \t2523.45\t0.0360462\t8749.3 \n",
      "6  \t99    \t2823.19\t2896.04\t0.0360462\t8775.92\n",
      "7  \t99    \t2526.52\t2731.62\t0.0277844\t8775.92\n",
      "8  \t99    \t2414.03\t2733.79\t0.0277844\t8775.92\n",
      "9  \t99    \t2874.17\t2910.11\t0.0277844\t8775.92\n",
      "10 \t99    \t2816.34\t2746.9 \t0.0277844\t8754.98\n",
      "11 \t99    \t2790.78\t2967.11\t0.00252793\t8775.92\n",
      "12 \t99    \t2800.64\t2989.78\t0.00252793\t8775.92\n",
      "13 \t99    \t2323.54\t2681.29\t0.00252793\t8775.92\n",
      "14 \t99    \t2292.09\t2648.86\t0.00252793\t8344.31\n",
      "15 \t99    \t2125.48\t2635.38\t0.00252793\t8775.92\n",
      "16 \t99    \t2718.88\t2875.46\t0.00252793\t8775.92\n",
      "17 \t99    \t2734.65\t2830.16\t0.00252793\t8775.92\n",
      "18 \t99    \t2699.24\t2709.54\t0.00252793\t8775.92\n",
      "19 \t99    \t2853.65\t3119.65\t0.00252793\t8775.92\n",
      "20 \t99    \t2744.36\t2832.32\t0.00252793\t8775.92\n",
      "21 \t99    \t2666.84\t2764.66\t0.00252793\t8775.92\n",
      "22 \t99    \t2634.35\t2877.85\t0.00252793\t8775.92\n",
      "23 \t99    \t2667.58\t3165.56\t0.00252793\t8775.92\n",
      "24 \t99    \t2622.79\t3146.84\t0.00252793\t8775.92\n",
      "25 \t99    \t2725.8 \t2883.89\t0.00252793\t8775.92\n",
      "26 \t99    \t3176.46\t2939.04\t0.00252793\t8775.92\n",
      "27 \t99    \t2707.19\t2930.24\t0.00252793\t8775.92\n",
      "28 \t99    \t2486.8 \t2879.1 \t0.00252793\t8775.92\n",
      "29 \t99    \t2873.86\t2961.16\t0.00252793\t8775.92\n",
      "30 \t99    \t2363.34\t2742.11\t0.00252793\t8775.92\n",
      "31 \t99    \t2538.78\t3001.62\t0.00252793\t8775.92\n",
      "32 \t99    \t2707.04\t2950.1 \t0.00252793\t8775.92\n",
      "33 \t99    \t2211.5 \t2586.93\t0.00252793\t8775.92\n",
      "34 \t99    \t3007.95\t3172.82\t0.00252793\t8775.92\n",
      "35 \t99    \t2536.62\t2620.22\t0.00252793\t8775.92\n",
      "36 \t99    \t3079.99\t2996.55\t0.00252793\t8775.92\n",
      "37 \t99    \t2573.43\t2671.52\t0.00252793\t8775.92\n",
      "38 \t99    \t2548.36\t2658.92\t0.00252793\t8775.92\n",
      "39 \t99    \t2493.23\t2775.03\t0.00252793\t8775.92\n",
      "40 \t99    \t2452.85\t2869.87\t0.00252793\t8775.92\n",
      "41 \t99    \t2224.84\t2751.59\t0.00252793\t8775.92\n",
      "42 \t99    \t1640.64\t2323.34\t0.00252793\t8439.4 \n",
      "43 \t99    \t1770.44\t2507.85\t5.97806e-05\t8775.92\n",
      "44 \t99    \t2395.13\t3151.17\t5.97806e-05\t8775.92\n",
      "45 \t99    \t2009.26\t2856.84\t5.97806e-05\t8775.92\n",
      "46 \t99    \t2091.16\t2676.9 \t5.97806e-05\t8775.92\n",
      "47 \t99    \t2005.28\t2560.24\t5.97806e-05\t8775.92\n",
      "48 \t99    \t1876.04\t2743.79\t5.97806e-05\t8775.92\n",
      "49 \t99    \t1760.83\t2744.91\t5.97806e-05\t8775.92\n",
      "50 \t99    \t1676.24\t2416.37\t5.97806e-05\t8775.92\n",
      "51 \t99    \t2612.49\t3280.33\t5.97806e-05\t8775.92\n",
      "52 \t99    \t2602.93\t2992.41\t5.97806e-05\t8775.92\n",
      "53 \t99    \t2222.3 \t2693.01\t5.97806e-05\t8775.92\n",
      "54 \t99    \t2439.63\t3094.93\t5.97806e-05\t8775.92\n",
      "55 \t99    \t2054.97\t2680.59\t5.97806e-05\t8775.92\n",
      "56 \t99    \t2231.06\t2957.3 \t5.97806e-05\t8775.92\n",
      "57 \t99    \t1518.18\t2395.78\t5.97806e-05\t8775.92\n",
      "58 \t99    \t2848.2 \t3104.3 \t5.97806e-05\t8775.92\n",
      "59 \t99    \t2490.17\t3018   \t5.97806e-05\t8775.92\n",
      "60 \t99    \t2148.35\t2767.27\t5.97806e-05\t8775.92\n",
      "61 \t99    \t1969.14\t2831.71\t5.97806e-05\t8775.92\n",
      "62 \t99    \t2224.64\t2867.48\t5.97806e-05\t8775.92\n",
      "63 \t99    \t2358.87\t2914.23\t5.97806e-05\t8775.92\n",
      "64 \t99    \t2765.81\t3124.97\t5.97806e-05\t8775.92\n",
      "65 \t99    \t1707.54\t2542.56\t5.97806e-05\t8775.92\n",
      "66 \t99    \t1852.55\t2629.4 \t5.97806e-05\t8775.92\n",
      "67 \t99    \t2345   \t3094.36\t5.97806e-05\t8775.92\n",
      "68 \t99    \t2114.86\t2616.41\t5.97806e-05\t8775.92\n",
      "69 \t99    \t2791.68\t3025.61\t5.97806e-05\t8775.92\n",
      "70 \t99    \t2767.98\t2951.77\t5.97806e-05\t8775.92\n",
      "71 \t99    \t3281.83\t3241.45\t5.97806e-05\t8775.92\n",
      "72 \t99    \t2576.48\t2983.63\t5.97806e-05\t8775.92\n",
      "73 \t99    \t2109.84\t2617.68\t5.97806e-05\t8775.92\n",
      "74 \t99    \t2523.81\t3081.93\t5.97806e-05\t8775.92\n",
      "75 \t99    \t2781.61\t2941.95\t5.97806e-05\t8775.92\n",
      "76 \t99    \t2182.43\t2777.31\t5.97806e-05\t8775.92\n",
      "77 \t99    \t2612.35\t3073.6 \t5.97806e-05\t8775.92\n",
      "78 \t99    \t2595.84\t2914.67\t5.97806e-05\t8775.92\n",
      "79 \t99    \t2909.38\t2982.13\t5.97806e-05\t8775.92\n",
      "80 \t99    \t3000.87\t3045.69\t5.97806e-05\t8775.92\n",
      "81 \t99    \t2236.84\t2788.87\t5.97806e-05\t8775.92\n",
      "82 \t99    \t2103.03\t2645.71\t5.97806e-05\t8775.92\n",
      "83 \t99    \t2068.25\t2749.68\t5.97806e-05\t8775.92\n",
      "84 \t99    \t2047.21\t2945.5 \t5.97806e-05\t8775.92\n",
      "85 \t99    \t2440.75\t3134.04\t5.97806e-05\t8775.92\n",
      "86 \t99    \t2666.72\t3040.8 \t5.97806e-05\t8775.92\n",
      "87 \t99    \t2735.58\t2982.61\t5.97806e-05\t8775.92\n",
      "88 \t99    \t2800.85\t3005.63\t5.97806e-05\t8775.92\n",
      "89 \t99    \t2356.94\t2828.97\t5.97806e-05\t8775.92\n",
      "90 \t99    \t2908.77\t2993.18\t5.97806e-05\t8775.92\n",
      "91 \t99    \t3014.83\t3277.47\t5.97806e-05\t8775.92\n",
      "92 \t99    \t2566.57\t2938.86\t5.97806e-05\t8775.92\n",
      "93 \t99    \t2326.82\t2979.93\t5.97806e-05\t8775.92\n",
      "94 \t99    \t1830.95\t2487.21\t5.97806e-05\t8775.92\n",
      "95 \t99    \t3016.39\t3260.22\t5.97806e-05\t8775.92\n",
      "96 \t99    \t2146.46\t2819.31\t5.97806e-05\t8775.92\n",
      "97 \t99    \t2532.65\t3135.74\t5.97806e-05\t8775.92\n",
      "98 \t99    \t2691.91\t3055.39\t5.97806e-05\t8775.92\n",
      "99 \t99    \t2334.23\t2917.69\t5.97806e-05\t8775.92\n",
      "100\t99    \t2615.43\t2781.56\t5.97806e-05\t8775.92\n",
      "101\t99    \t2704.34\t3104.79\t5.97806e-05\t8775.92\n",
      "102\t99    \t2181.25\t2897.61\t5.97806e-05\t8775.92\n",
      "103\t99    \t2225.99\t2954.17\t5.97806e-05\t8775.92\n",
      "104\t99    \t2977.04\t3414.37\t5.97806e-05\t8775.92\n",
      "105\t99    \t2540.4 \t3075.19\t5.97806e-05\t8775.92\n",
      "106\t99    \t2947.88\t3215.5 \t5.97806e-05\t8775.92\n",
      "107\t99    \t1983.93\t2746.81\t5.97806e-05\t8775.92\n",
      "108\t99    \t2596.98\t2981.99\t5.97806e-05\t8775.92\n",
      "109\t99    \t2883.61\t2949.5 \t5.97806e-05\t8775.92\n",
      "110\t99    \t2520.75\t2813.7 \t5.97806e-05\t8775.92\n",
      "111\t99    \t2125.13\t2545.08\t5.97806e-05\t8775.92\n",
      "112\t99    \t3111.19\t3045.69\t5.97806e-05\t8775.92\n",
      "113\t99    \t2634.09\t2792.73\t5.97806e-05\t8775.92\n",
      "114\t99    \t2890.39\t2752.61\t5.97806e-05\t8775.92\n",
      "115\t99    \t2418.67\t2686   \t5.97806e-05\t8775.92\n",
      "116\t99    \t2727.64\t2873.77\t5.97806e-05\t8775.92\n",
      "117\t99    \t1975.63\t2464.56\t5.97806e-05\t8775.92\n",
      "118\t99    \t2685.24\t2762.21\t5.97806e-05\t8775.92\n",
      "119\t99    \t3094.39\t3085.56\t5.97806e-05\t8775.92\n",
      "120\t99    \t2354.11\t2643.58\t5.97806e-05\t8775.92\n",
      "121\t99    \t3110.91\t2916.61\t5.97806e-05\t8775.92\n",
      "122\t99    \t2274.83\t2383.6 \t5.97806e-05\t8740.44\n",
      "123\t99    \t2746.13\t2830.07\t5.97806e-05\t8775.26\n",
      "124\t99    \t2506.71\t2612.15\t5.97806e-05\t8690.72\n",
      "125\t99    \t2407.81\t2494.98\t5.97806e-05\t7949.85\n",
      "126\t99    \t2483.86\t2642.38\t5.97806e-05\t8773.46\n",
      "127\t99    \t2798.05\t2537.35\t5.97806e-05\t8767.34\n",
      "128\t99    \t2725.73\t2580.47\t5.97806e-05\t8775.92\n",
      "129\t99    \t2677.56\t2585.12\t5.97806e-05\t8544.85\n",
      "130\t99    \t2576.59\t2470.17\t5.97806e-05\t8775.92\n",
      "131\t99    \t2758.97\t2671.46\t5.97806e-05\t8775.92\n",
      "132\t99    \t1911.01\t2432.05\t5.97806e-05\t8775.92\n",
      "133\t99    \t2450.55\t2569.71\t5.97806e-05\t8650.57\n",
      "134\t99    \t1933.91\t2405.76\t5.97806e-05\t8653.65\n",
      "135\t99    \t2294.52\t2665.99\t2.03544e-05\t8475.21\n",
      "136\t99    \t2669.75\t2679.83\t2.03544e-05\t8775.92\n",
      "137\t99    \t3088.73\t2863.77\t2.03544e-05\t8775.92\n",
      "138\t99    \t2846.03\t2563.91\t2.03544e-05\t8775.92\n",
      "139\t99    \t3330.76\t2616.49\t2.03544e-05\t8775.92\n",
      "140\t99    \t2854.26\t2476.8 \t2.03544e-05\t8775.92\n",
      "141\t99    \t2911.15\t2714.9 \t2.03544e-05\t8775.92\n",
      "142\t99    \t2774.65\t2626.47\t2.03544e-05\t8775.92\n",
      "143\t99    \t2446.25\t2611.29\t2.03544e-05\t8775.92\n",
      "144\t99    \t2868.5 \t2648.97\t2.03544e-05\t8775.92\n",
      "145\t99    \t2824.21\t2766.75\t2.03544e-05\t8775.92\n",
      "146\t99    \t2592.19\t2526.87\t2.03544e-05\t8724.19\n",
      "147\t99    \t2890.1 \t2572.33\t2.03544e-05\t8775.92\n",
      "148\t99    \t2631.69\t2548.77\t2.03544e-05\t8775.92\n",
      "149\t99    \t2895.96\t2624.96\t2.03544e-05\t8775.92\n",
      "150\t99    \t3066.97\t2600.94\t2.03544e-05\t8775.42\n",
      "151\t99    \t3049.04\t2445.04\t2.03544e-05\t8775.92\n",
      "152\t99    \t2904.76\t2888.83\t2.03544e-05\t8775.92\n",
      "153\t99    \t3521.12\t2713.18\t2.03544e-05\t8775.92\n",
      "154\t99    \t2765.99\t2694.67\t2.03544e-05\t8775.92\n",
      "155\t99    \t2990.38\t2950.5 \t2.03544e-05\t8775.92\n",
      "156\t99    \t3352.09\t3030.57\t2.03544e-05\t8775.92\n",
      "157\t99    \t2816.67\t2731.1 \t2.03544e-05\t8775.92\n",
      "158\t99    \t2523.48\t2954.53\t2.03544e-05\t8775.92\n",
      "159\t99    \t2714.6 \t2991.28\t2.03544e-05\t8775.92\n",
      "160\t99    \t2593.45\t3069.47\t2.03544e-05\t8775.92\n",
      "161\t99    \t2838.91\t3388.73\t2.03544e-05\t8775.92\n",
      "162\t99    \t2502.47\t3211.28\t2.03544e-05\t8775.92\n",
      "163\t99    \t2464.66\t2858.7 \t2.03544e-05\t8775.92\n",
      "164\t99    \t3508.26\t3536.53\t2.03544e-05\t8775.92\n",
      "165\t99    \t3124.72\t3404.43\t2.03544e-05\t8775.92\n",
      "166\t99    \t2960.68\t3265.5 \t2.03544e-05\t8775.92\n",
      "167\t99    \t3591.91\t3389.7 \t2.03544e-05\t8775.92\n",
      "168\t99    \t2718.91\t3031.44\t2.03544e-05\t8775.92\n",
      "169\t99    \t3078.77\t3177.14\t2.03544e-05\t8775.92\n",
      "170\t99    \t2876.81\t3337.35\t2.03544e-05\t8775.92\n",
      "171\t99    \t3317.18\t3429.56\t2.03544e-05\t8775.92\n",
      "172\t99    \t3652.62\t3471.92\t2.03544e-05\t8775.92\n",
      "173\t99    \t3209.91\t3431.5 \t2.03544e-05\t8775.92\n",
      "174\t99    \t3011.77\t3179.57\t2.03544e-05\t8775.92\n",
      "175\t99    \t2807.53\t3057.61\t2.03544e-05\t8775.92\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "176\t99    \t3232.18\t3247.32\t2.03544e-05\t8775.92\n",
      "177\t99    \t2433.82\t2966.71\t2.03544e-05\t8775.92\n",
      "178\t99    \t3398.92\t3452.68\t2.03544e-05\t8775.92\n",
      "179\t99    \t3287.07\t3326.25\t2.03544e-05\t8775.92\n",
      "180\t99    \t2918.58\t2965.84\t2.03544e-05\t8775.92\n",
      "181\t99    \t2616.89\t3134.6 \t2.03544e-05\t8775.92\n",
      "182\t99    \t2958.97\t3126.32\t2.03544e-05\t8775.92\n",
      "183\t99    \t2994.2 \t3406.16\t2.03544e-05\t8775.92\n",
      "184\t99    \t2748.53\t3060.63\t2.03544e-05\t8775.92\n",
      "185\t99    \t3379.25\t3234.97\t2.03544e-05\t8775.92\n",
      "186\t99    \t3434.18\t3107.3 \t2.03544e-05\t8775.92\n",
      "187\t99    \t3031.62\t3011.17\t2.03544e-05\t8775.92\n",
      "188\t99    \t3080.71\t3074.14\t2.03544e-05\t8775.92\n",
      "189\t99    \t3021   \t3177.33\t2.03544e-05\t8775.92\n",
      "190\t99    \t3026.25\t3396.39\t2.03544e-05\t8775.92\n",
      "191\t99    \t2821.39\t3175.62\t2.03544e-05\t8775.92\n",
      "192\t99    \t3034.38\t3304.77\t2.03544e-05\t8775.92\n",
      "193\t99    \t3001.04\t3412.74\t2.03544e-05\t8775.92\n",
      "194\t99    \t3168.81\t3301.92\t2.03544e-05\t8775.92\n",
      "195\t99    \t2786.51\t3327.88\t2.03544e-05\t8775.92\n",
      "196\t99    \t3905.83\t3523.9 \t2.03544e-05\t8775.92\n",
      "197\t99    \t3077.89\t3141.52\t2.03544e-05\t8775.92\n",
      "198\t99    \t3148.71\t3262.91\t2.03544e-05\t8775.92\n",
      "199\t99    \t2487.5 \t3050.76\t2.03544e-05\t8775.92\n",
      "200\t99    \t2934.91\t3209.69\t2.03544e-05\t8775.92\n"
     ]
    }
   ],
   "source": [
    "# size of population and number of generations\n",
    "n_pop = 100\n",
    "n_gen = 200\n",
    "\n",
    "pop = toolbox.population(n=n_pop)\n",
    "hof = tools.HallOfFame(3)   # only record the best three individuals ever found in all generations\n",
    "\n",
    "# start evolution\n",
    "pop, log = gep.gep_simple(pop, toolbox, n_generations=n_gen, n_elites=1,\n",
    "                          stats=stats, hall_of_fame=hof, verbose=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Let's check the best individuals ever evolved.**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "add(\n",
      "\tmul(4.591167176881115, mul(4.591167176881115, -4.380112794188509)),\n",
      "\tmul(add(-4.028140048087353, x), protected_div(x, mul(2.55884200770239, 4.760460688934424)))\n",
      ")\n"
     ]
    }
   ],
   "source": [
    "print(hof[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# *[optional]* Post-processing: simplification and visualization\n",
    "## Symbolic simplification of the final solution\n",
    "The original solution seems a little complicated, which may contain many redundancies, for example, `protected_div(x, x)` is just 1. We can perform symbolic simplification of the final result by `geppy.simplify` which depends on `sympy` package."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Symplified best individual 0: \n",
      "-2.45009584303344*x*(x - 4.02814004808735) + 14.5627104231744\n",
      "Symplified best individual 1: \n",
      "-2.45009584303344*x*(x - 4.02814004808735) + 14.5627104231744\n",
      "Symplified best individual 2: \n",
      "-2.45009584303344*x*(x - 4.02814004808735) + 14.5627104231744\n"
     ]
    }
   ],
   "source": [
    "for i in range(3):\n",
    "    ind = hof[i]\n",
    "    symplified_model = gep.simplify(ind)\n",
    "    if LINEAR_SCALING:\n",
    "        symplified_model = ind.a * symplified_model + ind.b\n",
    "    print('Symplified best individual {}: '.format(i))\n",
    "    print(symplified_model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see from the above simplified expression, the *truth model* has been successfully found. Due to the existence of Gaussian noise, the minimum mean absolute error （MAE) is still not zero even the best individual represents the true model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualization\n",
    "If you are interested in the expression tree corresponding to the individual, i.e., the genotype/phenotype system, *geppy* supports tree visualization by the `graph` and the `export_expression_tree` functions:\n",
    "\n",
    "- `graph` only outputs the nodes and links information to describe the tree topology, with which you can render the tree with tools you like;\n",
    "- `export_expression_tree` implements tree visualization with data generated by `graph` internally using the `graphviz` package. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    " # we want use symbol labels instead of words in the tree graph\n",
    "rename_labels = {'add': '+', 'sub': '-', 'mul': '*', 'protected_div': '/'}  \n",
    "best_ind = hof[0]\n",
    "gep.export_expression_tree(best_ind, rename_labels, 'data/numerical_expression_tree.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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tX//frVr1850CgAAACwYIxkAADmEm5ubnJyctHr1atMpFmXHjh168uSJ3nrrLdMpAAAAsGCMZAAA5CDDhg3TqlWrlJqaajrFYnz++efq1auXihQpYjoFAAAAFoyRDACAHGTw4MHKkyePli5dajrFIuzbt09Hjx7VpEmTTKcAAADAwjGSAQCQg+TPn18zZszQ1KlTdf36ddM5RiUnJ2vEiBH68MMP9dJLL5nOAQAAgIWzyrCkq6cAAMDflpGRoTZt2ujp06cKCgpS3rx5TScZMWzYMAUFBenUqVMqXLiw6RwAAABYtra8kwwAgBzGyspKa9asUWRkpPz8/EznGPHVV19p1apV2rBhAwMZAAAAnou16QAAAJD57OzstH79enXo0EHFixfXmDFjTCdlmR07dmjQoEFatGiR6tevbzoHAAAA2QQjGQAAOVSrVq20atUq9enTR/nz59eIESNMJ71wO3bsUI8ePTR69GgNGzbMdA4AAACyEUYyAABysF69eikpKUnDhw/XtWvXNHfuXFlZWZnOeiGWL18uHx8fffDBB5o+fbrpHAAAAGQzHNwPAEAuEBAQoF69esnT01Nff/21ypQpYzop0zx58kQjRozQihUrNHv2bPn6+ppOAgAAQPbDwf0AAOQGr776qmrXrq3w8HC5uLho3759ppMyxfnz59WgQQN98803euWVV1SzZk3TSQAAAMimGMkAAMjBrl69qnfeeUf169eXlZWVNmzYIA8PD7Vu3Vq9evVSfHy86cS/5NGjRxo9erRcXV1VtGhR7dixQ3Xq1FG7du3UqlUrnTp1ynQiAAAAshlGMgAAcqDExET5+vrKyclJR48e1fr16xUeHq727dtr48aN2rFjh8LDw1WtWjVNnTpVSUlJppOfS2pqqpYtWyYnJyetWrVKixYtUmhoqFq2bKmAgACFhITo8ePHql+/vnr16qWrV6+aTgYAAEA2wUgGAEAOkpqaqnnz5sne3l5r1qzRrFmzFBkZqbfffvufDuzv2LGjoqKiNGrUKM2fP1+vvvqqpk6dqjt37his/32PHj3S0qVL5ejoqBEjRsjb21s//fSThg4dqjx5/v9fZzw8PBQeHq6NGzfq+PHjcnR0lK+vr+7fv2+wHgAAANkBB/cDAJADpKena9OmTRo7dqzu3r2rkSNHytfXV8WLF//DP/vgwQMtXLhQixYt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UVFR+vzzz/XNN98oNTVVr7/+ury9vdW+fXsVLVo0S1vu3Lmj7777Tlu3btX+/ftVrlw5DRw4UIMHD1aFChX+1NeKi4vTuHHjtHXrVnl4eGjmzJlyc3N7QeUAcoK4uDj5+flp8+bNatKkiebOnfunXzcSExO1evVqLV++XNHR0XJzc5O3t7e6du0qe3v7F1T+7/36668KCgr67XU1OTlZXbt21XvvvaemTZtmaQsAAPjbGMkA4EU5e/as/P39FRAQoKpVq2rIkCHq27evSpYsaTpNknTt2jWtWLFCq1atUkJCgvr3769x48apUqVK//HPJSQkaMqUKfriiy/k4OCg6dOn64033siiagA5wbFjxzR27FiFhISoS5cumjVr1h++A/XevXtauHChPvvsM0lS7969NXToUNWsWTMrkv9QSkqKNm/erM8//1zHjh1Ts2bNNGXKFLVo0cJ0GgAAeD5tuWYMADLZzZs31aNHD9WpU0eXL19WQECALly4oA8//NBiBjJJqlixoqZOnarLly9r8eLF2r17txwdHTVy5MjfbtD831JSUvTJJ5+oSpUq2rZtmxYtWqQzZ84wkAH40xo1aqSDBw9q+/btio6OlrOzs3x8fJSQkPB/fm9aWprmzJmjypUra+nSpRo9erSuXbumxYsXW8xAJkm2trbq27evjh49qrCwMNna2qply5by8vLS+fPnTecBAIDnwEgGAJnk2bNnWrhwoapVq6YTJ05o69atOnnypN544w1ZWVmZzvtdNjY2GjRokGJiYvTpp5/qm2++kZOTkzZv3izpv57XqlWrVKVKFc2cOVO+vr6KiYnR4MGDM/3wbQC5S8eOHXXmzBktXbpUAQEBqly5sj755BMlJydLksLCwuTq6qrJkydr5MiRunz5siZMmKAiRYoYLv/PmjZtqj179igsLEzJyclydXWVr6/vb88LAABYJj5uCQCZ4MaNG3rnnXcUHh6uMWPGaOzYsZl+CH9WSUhI0Lhx47Ry5Uq1b99eFy9e/O3GyokTJ6p8+fKmEwHkQI8ePdKnn36qmTNnqkiRIvL09NS3336r1q1ba9GiRapSpYrpxL8kPT1dX3zxhcaPH6+yZctq48aNcnFxMZ0FAAD+L84kA4C/a9++ferZs6dKly6do7752bt3r3r37q0nT55o48aNat++vekkALlAZGSkXnvtNd2/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hg0znQIAQK5llcFJ1ADwXEaMGKGIiAiGMknJyclydHTUlClTNGjQINM5ALKhw4cPq2XLloqKipK9vb3pHOMGDx6sy5cva9++faZTAADIrdoykgHAc0pISJCjo6MWLlyovn37ms4x6qOPPtIPP/ygM2fOyNra2nQOgGyqa9eu+vXXX7Vz505ZWVmZzjHm6NGj8vT01JEjR1S3bl3TOQAA5FZt+bglADyn0qVLa9asWRo+fLji4uJM5xgTFBSkBQsWaOnSpQxkAP6W+fPnKywsTIsXLzadYsyDBw/Us2dPDRkyhIEMAADDeCcZAPxJXbp00cWLFxUaGqpixYqZzslScXFxatKkiQYPHqxp06aZzgGQA2zYsEH9+/fXrl275OXlZTonSz179kze3t66cuWKjh07xk3BAACYxcctAeDPunfvnho1aqRKlSrp+++/l62tremkLHH37l01adJElSpV0p49e3gXGYBM4+Pjo3Xr1ik0NFS1atUynZMlMjIyNHDgQH333XcKCwtT9erVTScBAJDb8XFLAPizSpYsqaCgIMXExKhz58569OiR6aQX7vr16/Ly8lLJkiW1bds2BjIAmeqzzz5TixYt1Lp1a/3444+mc164Z8+e6b333tPGjRu1a9cuBjIAACwEIxkA/AWvvPKK9uzZo8jISHl5een27dumk16Y8+fPq0mTJrKxsdH333+f6z5iCuDFy5s3rzZu3KgGDRqoefPm2rt3r+mkFyYlJUXdunXT2rVrtW3bNjVq1Mh0EgAA+G+MZADwFzk7Oys8PFzJyclq0KCBQkNDTSdlug0bNqhp06aqVq2aQkJCVKZMGdNJAHIoGxsbBQQEqHv37urQoYNmzJih9PR001mZKiYmRk2aNNH+/fs1b948tWnTxnQSAAD4XxjJAOBvKFKkiFq0aKH79+/Ly8tL/v7+evr0qemsv+3hw4caMGCAevXqpf79++v7779XkSJFTGcByOHy5s2rFStWaO7cufL391ebNm108+ZN01mZYvXq1apXr57y5csnFxcXDRkyRK1atdLhw4dNpwEAgP/GSAYAf0FKSormzZsne3t7bdy4UTNnztSCBQs0a9Ysubq6KiQkxHTiX7Zx40Y5OTlpx44d2rFjhxYsWCAbGxvTWQBykX/84x8KDw/X1atX5eTkpPnz5ystLc101l8SFRWlFi1aaMCA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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# show the above image here for convenience\n",
    "from IPython.display import Image\n",
    "Image(filename='data/numerical_expression_tree.png') "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Discussion\n",
    "**With the given no-noise data, a normal GEP can only find a model with $MSE=52.0646$, though the model structure is right. By contrast, linear scaling-enabled GEP obtains a solution with $MSE=2.03544e^{-5}$, which is qualified to be considered as the true model.**\n",
    "\n",
    "If only integer constants are involved, then the GEP-RNC algorithm and the ENC-based algorithm can both be adopted. However, generally the GEP-RNC algorithm is more effective.\n",
    "\n",
    "In other cases where the model is more complicated involving real coefficients and constants, then both of the above two algorithms will have difficulty in optimizing these constants. A better way is to incorporate a local optimizater into GEP dedicated to constant number optimization, or use other techniques like the linear scaling here. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
